package com.hspedu.codeblock;

import com.sun.org.apache.bcel.internal.generic.NEW;

/**
 * @Author Stringzhua
 * @Date 2024/3/5 17:31
 * description:构造方法(构造器)的最前面其实隐含了super()和调用普通代码块
 * 静态相关的代码块,属性初始化,在类加载时,就执行完毕,因此是优先于构造器和普通代码块执行的
 */
public class CodeBlockDetail03 {
    public static void main(String[] args) {
        BBB bbb = new BBB();
        //0.AAA的普通代码块... 1.AAA() 构造器被调用... 2.BBB的代码块... 3.BBB() 构造器被调用...
    }
}

class AAA {//父类的Object

    {
        System.out.println("AAA的普通代码块...");
    }

    public AAA() {//构造器
        //这里有几句隐藏的执行要求
//       (1) super();//默认调用父类的无参构造器
        //(2)调用本类的普通代码块
        super();
        System.out.println("AAA() 构造器被调用...");
    }
}

class BBB extends AAA {
    {
        System.out.println("BBB的普通代码块...");
    }

    public BBB() {
        //(1)super()
        //(2)调用本类的构造器
        super();
        System.out.println("BBB() 构造器被调用...");
    }
}